博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
io的常用操作
阅读量:5162 次
发布时间:2019-06-13

本文共 21350 字,大约阅读时间需要 71 分钟。

Q1:简单的创建文件

package com.zhangyuwei.io;import java.io.File;import java.io.IOException;public class test1 {    public static void main(String[] args) throws IOException {        File file=new File("E:\\io"+File.separator,"file1.txt");        if(file.exists()){            System.out.println("文件已经存在");        }else{            file.createNewFile();            System.out.println("文件创建成功!");        }    }}

 

Q2:文件的一些常用操作

package com.zhangyuwei.io;import java.io.File;import java.io.IOException;import java.text.SimpleDateFormat;import java.util.Date;public class test2 {    public static void main(String[] args) throws IOException {        File file=new File("E:\\io\\file.txt");        /*单个文件*/        //file.createNewFile();        /*单级文件夹*/        //file.mkdir();        /*多级文件夹*/        //file.mkdirs();        /*重命名*/        //file.createNewFile();        File file1=new File("E:\\io\\file1.txt");        //file.renameTo(file1);        /*删除*/        //file.createNewFile();        //file.delete();        /*删除执行完后的*/        //file.createNewFile();        //file1.createNewFile();        //file.deleteOnExit();        /*判断文件或文件夹是否存在*/        //file.createNewFile();        /*if(file.exists()){            System.out.println("文件存在");        }*/        //file.delete();        /*是一个文件夹吗?*/        //file.mkdir();        /*if(file.isDirectory()){            System.out.println("是一个文件夹");        }else{            System.out.println("不是一个文件夹");        }*/        /*获得文件或者文件夹的名称*/        //System.out.println(file.getName());        /*绝对路径*/        //file.createNewFile();        //System.out.println(file.getPath());        //System.out.println(file.getAbsolutePath());        /*文件大小是*/        //System.out.println(file.length());        /*父路径是*/        //System.out.println(file.getParent());        /*最后一次修改的时间是*/        /*long  lastmodified= file.lastModified();        Date data = new Date(lastmodified);        SimpleDateFormat simpledataformat = new SimpleDateFormat("YY年MM月DD日 HH:mm:ss");        System.out.println("最后一次修改的时间是:"+simpledataformat.format(data));*/    }}

 Q3:获取文件或文件夹的方法

package com.zhangyuwei.io;import java.io.File;public class test3 {    public static void main(String[] args) {        //文件或者文件夹的方法        File[] file=File.listRoots();        System.out.println("所有的盘符是:");//盘符就是C:\\   D:\\  E:\\等等        for(File item:file){            System.out.println("\t"+item);        }        File fileName=new File("E:\\");        String[] name=fileName.list();        System.out.println("指定文件夹下的文件或者文件夹有:");//包括当前这个文件下的所有文件,不包括子文件        for (String item:name){
//这个获得的是相对路径 System.out.println("\t"+item); } File[] files=fileName.listFiles(); System.out.println("获得该路径下的文件或文件夹是:");//这个获得的是绝对路径 for(File items:files){ System.out.println("\t"+items); } }}

 

 Q4:递归获得所有文件与文件夹

package com.zhangyuwei.io;import java.io.File;public class test4 {    public static void main(String[] args) {        //递归获得所有文件与文件夹        File file=new File("E:"+File.separator+"s3s143twoclass"+File.separator+"Idea");        ListFile(file);    }    public static void ListFile(File file01){        if(file01.isDirectory()){            File[] files=file01.listFiles();            for(File item:files){                System.out.println(item);                ListFile(item);            }        }    }}

 

Q5:字节流与字符流

1.字节流与字符流的区别:

  • 读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节。
  • 处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据。
  • 结论:只要是处理纯文本数据,就优先考虑使用字符流。 除此之外都使用字节流。

 2:输出字节流OutputStream(OutputStream 是所有的输出字节流的父类,它是一个抽象类。)

package com.zhangyuwei.io;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;public class test5 {    public static void main(String[] args) throws IOException {        //输出字节流OutputStream        // 第1步:使用File类找到一个文件        File file=new File("E:"+File.separator+"io"+File.separator+"file.txt");        if(file.exists()){            System.out.println("文件存在");        }else{            file.createNewFile();        }        //第2步:通过子类实例化父类对象        OutputStream outputStream=new FileOutputStream(file); 通过对象多态性,进行实例化        // 第3步:进行写操作        String str="Hello Word!";// 准备一个字符串        byte[] b=str.getBytes();// 只能输出byte数组,所以将字符串变为byte数组        outputStream.write(b);//将内容输出,保存文件        //第4步,关闭输出流        outputStream.close();    }}

 

3:字节输入流InputStream(是所有的输入字节流的父类,它是一个抽象类。)

package com.zhangyuwei.io;import java.io.*;public class test6 {    public static void main(String[] args) throws IOException {        //字节输入流inputStream        // 第1步:使用File类找到一个文件        File file=new File("E:"+File.separator+"io"+File.separator+"file.txt");        // 第2步:通过子类实例化父类对象        InputStream inputStream=new FileInputStream(file);// 通过对象多态性进行实例化        // 第3步:进行读操作        byte[] b=new byte[1024];// 所有的内容读到此数组中        inputStream.read(b);// 把内容从文件中取出,内容读到byte数组中        // 第4步:关闭输入流        inputStream.close();        System.out.println("内容为:"+new String(b));//将byte变成字符串输出    }}

 

内容已经被读取进来,但是发现后面有很多空格,这是应为开辟的byte数组大小为1024,而实际内容并没有1024个字节,也就是说存在很多个空白的空间这样操作显然不合理.

如果想要解决以上问题,这是你就需要观察read方法,它是有返回值的,次返回值表示向数组写入了多少个数据

改进代码如下:

package com.zhangyuwei.io;import java.io.*;public class test6 {    public static void main(String[] args) throws IOException {        //字节输入流inputStream        // 第1步:使用File类找到一个文件        File file=new File("E:"+File.separator+"io"+File.separator+"file.txt");        // 第2步:通过子类实例化父类对象        InputStream inputStream=new FileInputStream(file);// 通过对象多态性进行实例化        // 第3步:进行读操作        byte[] b=new byte[1024];// 所有的内容读到此数组中        int len=inputStream.read(b);// 把内容从文件中取出,内容读到byte数组中        // 第4步:关闭输入流        inputStream.close();        System.out.println("读取数据的长度:"+len);        System.out.println("内容为:"+new String(b,0,len));//将byte变成字符串输出    }}
View Code

 

 此时,再次运行程序,发现没有多余的空格产生,这是因为程序最后只是把byte数组指定范围中的内容变成了字符串,注意:注意输入文件的路径,在使用FileInputStream读取时如果指定

路径不存在,则程序会出现异常。

以上问题是否还有其他办法解决呢?当然是有的,虽最后指定了byte数组的范围,但是程序依然开辟了很多无用的空间,这样肯定会造成资源的浪费,那么此时能否根据文件数据量来开辟?

想完成这样的操作,则要从File类着手,因为在File类中存在着一个length()方法,此方法可以取得文件的大小,来开辟指定大小的byte数组.

package com.zhangyuwei.io;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;public class test7 {    public static void main(String[] args) throws IOException {        //字节输入流inputStream        // 第1步:使用File类找到一个文件        File file=new File("E:"+File.separator+"io"+File.separator+"file.txt");        // 第2步:通过子类实例化父类对象        InputStream inputStream=new FileInputStream(file);// 通过对象多态性进行实例化        // 第3步:进行读操作        byte[] b=new byte[(int)file.length()];// 所有的内容读到此数组中        inputStream.read(b);// 把内容从文件中取出,内容读到byte数组中        // 第4步:关闭输入流        inputStream.close();        System.out.println("内容为:"+new String(b));//将byte变成字符串输出    }}
View Code

 

 除上面方法外,也可以通过循环从文件中一个一个内容读取出来,直接使用read()方法即可

package com.zhangyuwei.io;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;public class test8 {    public static void main(String[] args) throws IOException {        //字节输入流inputStream        // 第1步:使用File类找到一个文件        File file=new File("E:"+File.separator+"io"+File.separator+"file.txt");        // 第2步:通过子类实例化父类对象        InputStream inputStream=new FileInputStream(file);// 通过对象多态性进行实例化        // 第3步:进行读操作        byte[] b=new byte[(int)file.length()];// 所有的内容读到此数组中        for(int i=0;i
View Code

 

总结:以上便是方法的一些改进,无论是哪个总有它的用处,最好呢,都掌握,因为随着开发的需要,有可能都使用到.

4:字符流操作

1:因为数据编码的不同,而有了对字符进行高效操作的流对象。本质其实就是基于字节流读取时,去查了指定的码表。 

程序中的输入输出都是以流的形式保存的,流中保存的实际上全都是字节文件。

2:字符流输出(OutputStream 写出 就是将数据从程序写入到外部文件。对应 Writer)

package com.zhangyuwei.io;import java.io.File;import java.io.FileWriter;import java.io.IOException;import java.io.Writer;public class test10 {    public static void main(String[] args) throws IOException {        File file=new File("E:"+File.separator+"io"+File.separator+"file.txt");        if(!file.exists()){            file.createNewFile();        }        Writer writer=new FileWriter(file);        //Writer writer=new FileWriter(file,true);//追加        String str="张雨威";        writer.write(str);        writer.flush();        writer.close();    }}

 

 

3:字符流输入

package com.zhangyuwei.io;import java.io.*;public class test11 {    /*字符流输入*/    public static void main(String[] args) throws IOException {        File file=new File("e:"+File.separator+"io"+File.separator+"file.txt");        Reader reader=new FileReader(file);        char[] bytes=new char[(int)file.length()];        reader.read(bytes);        reader.close();        System.out.println(new String(bytes));    }}

 

另一种做法

package com.zhangyuwei.io;import java.io.*;public class test11 {    /*字符流输入*/    public static void main(String[] args) throws IOException {        File file=new File("e:"+File.separator+"io"+File.separator+"file.txt");        Reader reader=new FileReader(file);        char[] bytes=new char[(int)file.length()];        int temp;        int i=0;        while ((temp=reader.read(bytes)) !=-1){            bytes[i++]=(char)temp;        }        reader.close();        System.out.println("内容:"+new String(bytes));    }}

 

4:打印流

package com.zhangyuwei.io;import java.io.*;public class test12 {    public static void main(String[] args) throws IOException {        File file=new File("E:"+File.separator+"io"+File.separator+"file2.txt");        if(!file.exists()){            file.createNewFile();        }        PrintStream ps=null;        ps=new PrintStream(new FileOutputStream(file));        ps.print("我是:");ps.println("zhangyuwei");        ps.print("\t"+"嚄噢哦");        ps.close();    }}

 

Q6:简单的动态页面静态化

package com.zhangyuwei.io;import java.io.*;import java.util.UUID;public class test9 {    public static void main(String[] args) throws IOException {        //生成新闻页        File file05 = new File("e:" + File.separator +"io"+File.separator+"index.html");        OutputStream os=new FileOutputStream(file05);        StringBuffer strb=new StringBuffer();        strb.append("
    "); for (int i = 0; i <10; i++) { File file=new File("e:"+File.separator+"io"+File.separator+"news0"+i+".html"); OutputStream os2=new FileOutputStream(file); String val=UUID.randomUUID().toString(); os2.write(val.getBytes()); os2.close(); strb.append("
  • "); strb.append(""+UUID.randomUUID()+""); strb.append("
  • "); } strb.append("
"); String news=strb.toString(); os.write(news.getBytes()); os.close(); }}

  结果:

Q7:文件操作工具类

package com.zhangyuwei.io;import java.io.*;import java.util.StringTokenizer;public class FileUtil2 {    private static String message;    /**     * 读取文本文件内容     *     * @param filePathAndName     *            带有完整绝对路径的文件名     * @param encoding     *            文本文件打开的编码方式     * @return 返回文本文件的内容     */    public static String readTxt(String filePathAndName, String encoding) throws IOException {        encoding = encoding.trim();        StringBuffer str = new StringBuffer("");        String st = "";        try {            FileInputStream fs = new FileInputStream(filePathAndName);            InputStreamReader isr;            if (encoding.equals("")) {                isr = new InputStreamReader(fs);            } else {                isr = new InputStreamReader(fs, encoding);            }            BufferedReader br = new BufferedReader(isr);            try {                String data = "";                while ((data = br.readLine()) != null) {                    str.append(data + " ");                }            } catch (Exception e) {                str.append(e.toString());            }            st = str.toString();        } catch (IOException es) {            st = "";        }        return st;    }    /**     * @description 写文件     * @param args     * @throws UnsupportedEncodingException     * @throws IOException     */    public static boolean writeTxtFile(String content, File fileName, String encoding) {        FileOutputStream o = null;        boolean result=false;        try {            o = new FileOutputStream(fileName);            o.write(content.getBytes(encoding));            result=true;        } catch (FileNotFoundException e) {            e.printStackTrace();        } catch (UnsupportedEncodingException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        } finally {            if (o != null) {                try {                    o.close();                } catch (IOException e) {                    e.printStackTrace();                }            }        }        return result;    }    /**     *     * @param content     * @param fileName     * @return     */    public static boolean writeTxtFile(String content,String fileName)    {        return   writeTxtFile(content,new File(fileName),"UTF-8");    }    /**     * 新建目录     *     * @param folderPath     *            目录     * @return 返回目录创建后的路径     */    public static String createFolder(String folderPath) {        String txt = folderPath;        try {            java.io.File myFilePath = new java.io.File(txt);            txt = folderPath;            if (!myFilePath.exists()) {                myFilePath.mkdir();            }        } catch (Exception e) {            message = "创建目录操作出错";        }        return txt;    }    /**     * 多级目录创建     *     * @param folderPath     *            准备要在本级目录下创建新目录的目录路径 例如 c:myf     * @param paths     *            无限级目录参数,各级目录以单数线区分 例如 a|b|c     * @return 返回创建文件后的路径 例如 c:myfac     */    public static String createFolders(String folderPath, String paths) {        String txts = folderPath;        try {            String txt;            txts = folderPath;            StringTokenizer st = new StringTokenizer(paths, "|");            for (int i = 0; st.hasMoreTokens(); i++) {                txt = st.nextToken().trim();                if (txts.lastIndexOf("/") != -1) {                    txts = createFolder(txts + txt);                } else {                    txts = createFolder(txts + txt + "/");                }            }        } catch (Exception e) {            message = "创建目录操作出错!";        }        return txts;    }    /**     * 新建文件     *     * @param filePathAndName     *            文本文件完整绝对路径及文件名     * @param fileContent     *            文本文件内容     * @return     */    public static void createFile(String filePathAndName, String fileContent) {        try {            String filePath = filePathAndName;            filePath = filePath.toString();            File myFilePath = new File(filePath);            if (!myFilePath.exists()) {                myFilePath.createNewFile();            }            FileWriter resultFile = new FileWriter(myFilePath);            PrintWriter myFile = new PrintWriter(resultFile);            String strContent = fileContent;            myFile.println(strContent);            myFile.close();            resultFile.close();        } catch (Exception e) {            message = "创建文件操作出错";        }    }    /**     * 有编码方式的文件创建     *     * @param filePathAndName     *            文本文件完整绝对路径及文件名     * @param fileContent     *            文本文件内容     * @param encoding     *            编码方式 例如 GBK 或者 UTF-8     * @return     */    public static void createFile(String filePathAndName, String fileContent, String encoding) {        try {            String filePath = filePathAndName;            filePath = filePath.toString();            File myFilePath = new File(filePath);            if (!myFilePath.exists()) {                myFilePath.createNewFile();            }            PrintWriter myFile = new PrintWriter(myFilePath, encoding);            String strContent = fileContent;            myFile.println(strContent);            myFile.close();        } catch (Exception e) {            message = "创建文件操作出错";        }    }    /**     * 删除文件     *     * @param filePathAndName     *            文本文件完整绝对路径及文件名     * @return Boolean 成功删除返回true遭遇异常返回false     */    public static boolean delFile(String filePathAndName) {        boolean bea = false;        try {            String filePath = filePathAndName;            File myDelFile = new File(filePath);            if (myDelFile.exists()) {                myDelFile.delete();                bea = true;            } else {                bea = false;                message = (filePathAndName + "删除文件操作出错");            }        } catch (Exception e) {            message = e.toString();        }        return bea;    }    /**     * 删除文件夹     *     * @param folderPath     *            文件夹完整绝对路径     * @return     */    public static void delFolder(String folderPath) {        try {            delAllFile(folderPath); // 删除完里面所有内容            String filePath = folderPath;            filePath = filePath.toString();            java.io.File myFilePath = new java.io.File(filePath);            myFilePath.delete(); // 删除空文件夹        } catch (Exception e) {            message = ("删除文件夹操作出错");        }    }    /**     * 删除指定文件夹下所有文件     *     * @param path     *            文件夹完整绝对路径     * @return     * @return     */    public static boolean delAllFile(String path) {        boolean bea = false;        File file = new File(path);        if (!file.exists()) {            return bea;        }        if (!file.isDirectory()) {            return bea;        }        String[] tempList = file.list();        File temp = null;        for (int i = 0; i < tempList.length; i++) {            if (path.endsWith(File.separator)) {                temp = new File(path + tempList[i]);            } else {                temp = new File(path + File.separator + tempList[i]);            }            if (temp.isFile()) {                temp.delete();            }            if (temp.isDirectory()) {                delAllFile(path + "/" + tempList[i]);// 先删除文件夹里面的文件                delFolder(path + "/" + tempList[i]);// 再删除空文件夹                bea = true;            }        }        return bea;    }    /**     * 复制单个文件     *     * @param oldPathFile     *            准备复制的文件源     * @param newPathFile     *            拷贝到新绝对路径带文件名     * @return     */    public static void copyFile(String oldPathFile, String newPathFile) {        try {            int bytesum = 0;            int byteread = 0;            File oldfile = new File(oldPathFile);            if (oldfile.exists()) { // 文件存在时                InputStream inStream = new FileInputStream(oldPathFile); // 读入原文件                FileOutputStream fs = new FileOutputStream(newPathFile);                byte[] buffer = new byte[1444];                while ((byteread = inStream.read(buffer)) != -1) {                    bytesum += byteread; // 字节数 文件大小                    System.out.println(bytesum);                    fs.write(buffer, 0, byteread);                }                inStream.close();            }        } catch (Exception e) {            message = ("复制单个文件操作出错");        }    }    /**     * 复制整个文件夹的内容     *     * @param oldPath     *            准备拷贝的目录     * @param newPath     *            指定绝对路径的新目录     * @return     */    public static void copyFolder(String oldPath, String newPath) {        try {            new File(newPath).mkdirs(); // 如果文件夹不存在 则建立新文件夹            File a = new File(oldPath);            String[] file = a.list();            File temp = null;            for (int i = 0; i < file.length; i++) {                if (oldPath.endsWith(File.separator)) {                    temp = new File(oldPath + file[i]);                } else {                    temp = new File(oldPath + File.separator + file[i]);                }                if (temp.isFile()) {                    FileInputStream input = new FileInputStream(temp);                    FileOutputStream output = new FileOutputStream(newPath + "/" + (temp.getName()).toString());                    byte[] b = new byte[1024 * 5];                    int len;                    while ((len = input.read(b)) != -1) {                        output.write(b, 0, len);                    }                    output.flush();                    output.close();                    input.close();                }                if (temp.isDirectory()) {
// 如果是子文件夹 copyFolder(oldPath + "/" + file[i], newPath + "/" + file[i]); } } } catch (Exception e) { message = "复制整个文件夹内容操作出错"; } } /** * 移动文件 * * @param oldPath * @param newPath * @return */ public static void moveFile(String oldPath, String newPath) { copyFile(oldPath, newPath); delFile(oldPath); } /** * 移动目录 * * @param oldPath * @param newPath * @return */ public static void moveFolder(String oldPath, String newPath) { copyFolder(oldPath, newPath); delFolder(oldPath); } /** * 得到错误信息 */ public static String getMessage() { return message; }}
View Code

 

测试

package com.zhangyuwei.io;import java.io.File;import java.io.IOException;public class test13 {    public static void main(String[] args) throws IOException {        //多级目录的创建        /*String path=FileUtil2.createFolders("E:io","a/b/c/d");        System.out.println(path);*/        FileUtil2.createFile("E:"+File.separator+"io"+File.separator+"files3.txt","飞洒发的飞洒","utf-8");    }}

 

Q8:官网下载地址:

官网:

下载 :

提示:要想要知道Excel导入导出,请看我另一篇博客:

 

转载于:https://www.cnblogs.com/zywds/p/9923219.html

你可能感兴趣的文章
php英语单词,php常用英语单词,快速学习php编程英语(4)
查看>>
5月29,48h,Geekathon,创业极客的梦想起点
查看>>
bzoj4415: [Shoi2013]发牌
查看>>
JAVA基础——使用配置文件
查看>>
Unicode转字符串
查看>>
Keil C51汉字显示的bug问题
查看>>
网页浮动的解析
查看>>
webgis技术在智慧城市综合治理(9+X)网格化社会管理平台(综治平台)的应用研究...
查看>>
Ansible--项目实战
查看>>
一步一步制作yaffs/yaffs2根文件系统(六)---完善命令行提示符
查看>>
不同间距BGA的过孔及规则设置
查看>>
堆和栈
查看>>
创建.删除,更新,获取数据库命令
查看>>
java Web jsp嵌入代码的三种方式
查看>>
实现tail
查看>>
[转载]中文编码杂谈
查看>>
第一次作业
查看>>
Qt线程--降低线程占用CPU
查看>>
2018 ACM/ICPC 沈阳现场赛(留坑)
查看>>
eval(function(p,a,c,k,e,r)解密程序
查看>>